import cv2
import numpy as np

from _0work_tools import cv_show

"""
@Project: pythonPro1
@Name: _03fulfill.py
@Author: linxin_liu
@Date: 2022/10/15 9:37
"""
if __name__ == '__main__':
    img_original = cv2.imread('D:/tools/image_operation/cat.png', cv2.IMREAD_GRAYSCALE)
#    top_size, bottom_size, left_size, right_size = (1, 1, 1, 1)  # 边界填充的大小，以不同的方式填充。
#    print(img_original)


def fulfill_border(img, top_s, bottom_s, left_s, right_s, border_type):
    h = len(img) + top_s + bottom_s  # 大图片的高
    w = len(img[0]) + left_s + right_s  # 大图片的宽
    array_temp = np.arange(0, h * w)
    img_temp = array_temp.reshape((h, w))  # 一维转二维
    # 先处理灰度图。
    if border_type == 'black':  # 添加的像素都为0
        img_temp[1:len(img_temp) - 1, 1:len(img_temp[0]) - 1] = img[:, :]  # 原图赋值。
        # print('function_img_temp')
        # print(img_temp)
        img_temp[0:1, 0:len(img_temp[0])] = 0  # 第一行为0
        img_temp[len(img_temp) - 1:len(img_temp), 0:len(img_temp[0])] = 0  # 最后一行为0
        img_temp[0:len(img_temp), 0:1] = 0  # 第一列
        img_temp[0:len(img_temp), len(img_temp[0]) - 1:len(img_temp[0])] = 0  # 最后一列
    elif border_type == 'white':  # 添加的像素都为255
        img_temp[1:len(img_temp) - 1, 1:len(img_temp[0]) - 1] = img[:, :]
        img_temp[0:1, 0:len(img_temp[0])] = 255  # 第一行为255
        img_temp[len(img_temp) - 1:len(img_temp), 0:len(img_temp[0])] = 255  # 最后一行为255
        img_temp[0:len(img_temp), 0:1] = 255  # 第一列
        img_temp[0:len(img_temp), len(img_temp[0]) - 1:len(img_temp[0])] = 255  # 最后一列
    else:
        pass
    return np.array(img_temp, dtype=np.uint8)  # 修改数据类型。


def img_reshape(img, value):
    # 图像切割，从头开始切割。
    h = value[0]
    w = value[1]
    return img[0:h, 0:w]


if __name__ == '__main__':
    black_border_1 = fulfill_border(img_original, 1, 1, 1, 1, 'black')  # 照片加大一圈。
    print(black_border_1)
    print(type(black_border_1))
    cv_show('a', black_border_1, 5000)
    # 切割结果和原图并不一样。
    after_reshape = img_reshape(black_border_1, [len(black_border_1)-2, len(black_border_1[0])-2])
    print(after_reshape)
